import { screen, imageResource, mouse, keyboard, Key } from '@nut-tree/nut-js';
import '@nut-tree/template-matcher';
import { wechatWorkMessageReader } from './wechatWorkMessageReader.js';

// 配置屏幕设置
screen.config.resourceDirectory = './src/assets';
screen.config.autoHighlight = true;
screen.config.highlightDurationMs = 3000;

// 显示使用提示
console.log('============================================================');
console.log('                 NutJS RPA 企业微信消息读取演示               ');
console.log('============================================================');
console.log('可用命令:');
console.log('  1. 按 1 - 运行基础模板匹配演示');
console.log('  2. 按 2 - 启动企业微信消息监控');
console.log('  3. 按 q - 退出程序');
console.log('============================================================');

// 基础模板匹配演示函数
async function runTemplateMatchDemo() {
    console.log('\n启动基础模板匹配演示...');
    const templates = [
        // 'btn-1-190x80.png',
        // 'btn-2-192x80.png',
        // 'btn-3-212x96.png',
        // 'btn-4-154x58.png',
        // 'btn-6-198x86.png',
        // 'btn-7-192x80.png',
        'btn-8-166x60.png',
        // 'btn-10-198x86.png',
    ];
    
    for (const imageTemplate of templates) {
        try {
            console.log(`尝试匹配模板: ${imageTemplate}`);
            const region = await screen.find(imageResource(imageTemplate), { confidence: 0.75 });
            console.log(`找到匹配区域:`, region);
            
            // 高亮显示找到的区域
            await screen.highlight(region);
            
            // 点击匹配区域
            await mouse.move({
                x: region.x + region.width / 2,
                y: region.y + region.height / 2
            });
            await mouse.leftClick();
            
            // 等待一段时间
            await new Promise(resolve => setTimeout(resolve, 1000));
        } catch (e) {
            console.error(`匹配 ${imageTemplate} 失败:`, e);
        }
    }
    
    console.log('\n基础模板匹配演示完成');
    showMenu();
}

// 企业微信消息监控函数
async function startWechatWorkMonitoring() {
    console.log('\n启动企业微信消息监控...');
    
    try {
        // 初始化消息读取器
        const isInitialized = await wechatWorkMessageReader.init();
        if (!isInitialized) {
            console.error('企业微信消息读取器初始化失败');
            showMenu();
            return;
        }
        
        // 自定义配置
        wechatWorkMessageReader.config = {
            ...wechatWorkMessageReader.config,
            // 注意：需要准备企业微信和新消息的图标模板
            confidenceThreshold: 0.8,
            retryAttempts: 3,
            retryDelayMs: 1000
        };
        
        console.log('提示: 请确保企业微信已打开并处于可见状态');
        console.log('提示: 按 Ctrl+C 可停止监控并返回主菜单');
        
        // 启动监控，每5秒检查一次
        await wechatWorkMessageReader.startMonitoring(5000);
    } catch (error) {
        console.error('企业微信消息监控过程中出错:', error);
        showMenu();
    }
}

// 显示菜单
function showMenu() {
    console.log('\n请选择要执行的操作:');
    console.log('  1 - 运行基础模板匹配演示');
    console.log('  2 - 启动企业微信消息监控');
    console.log('  q - 退出程序');
}

// 设置键盘监听
keyboard.config.autoDelayMs = 0;
keyboard.onKeyDown(async (key) => {
    switch (key) {
        case Key.One:
            await runTemplateMatchDemo();
            break;
        case Key.Two:
            await startWechatWorkMonitoring();
            break;
        case Key.Q:
            console.log('\n程序已退出');
            process.exit(0);
            break;
    }
});

// 显示初始菜单
showMenu();

// 处理退出信号
process.on('SIGINT', async () => {
    console.log('\n接收到退出信号');
    try {
        await wechatWorkMessageReader.stopMonitoring();
    } catch (error) {
        // 忽略错误
    }
    console.log('程序已退出');
    process.exit(0);
});

// 提示：要实现完整的企业微信消息读取功能，还需要：
// 1. 准备企业微信和新消息的图标模板文件
// 2. 根据实际界面调整区域参数
// 3. 考虑集成OCR库以提取消息文本内容
// 4. 添加错误处理和日志记录机制
// 5. 在生产环境中，可能需要处理不同分辨率的屏幕和窗口位置变化

